Python中的格式轉換,格式(補零、指數記法、十六進制等)

您所在的位置:网站首页 python format 冒号左边的0 Python中的格式轉換,格式(補零、指數記法、十六進制等)

Python中的格式轉換,格式(補零、指數記法、十六進制等)

2024-07-10 20:02| 来源: 网络整理| 查看: 265

要在 Python 中將數字或字符串轉換(格式化)為各種格式,請使用內置函數 format() 或字符串方法 str.format()。

在本節中,我們將解釋如何使用以下功能。

內置函數(例如在編程語言中)format()字符串方法str.format()

此外,用於轉換為以下格式的格式指定字符串通過示例代碼進行說明。

左對齊、中心對齊、右對齊零填充符號(加號或減號)數字分隔符(逗號、下劃線)二進制、八進制和十六進制數指定小數點後的位數有效數字(有效數字的位數)指數符號百分比顯示

請注意,從 Python 3.6 開始,字符串方法 str.format() 中添加了 f-strings (f-strings) 以使其更加簡潔。

內置函數:format()字符串方法 str.format()指定替換字段的參數按順序指定參數(默認)為整數值指定位置參數為任意名稱(字符串)指定關鍵字參數指定一個列表或字典作為參數大括號 {} 的說明格式化字符串左對齊、中心對齊、右對齊0 填充符號(加號或減號)數字分隔符(逗號、下劃線)二進制、八進制和十六進制數指定小數點後的位數指數符號有效數字(有效數字的位數)百分比顯示內置函數:format()

format() 作為標準的 Python 內置函數提供。

Built-in Functions — format() — Python 3.10.0 Documentation

概要如下。

format(value, format_spec)第一個論點:value原始值。字符串 str、數字 int、浮點數等。第二個論點format_spec格式規範字符串。字符串字符串返回值:格式化字符串 str

示例如下所示。格式字符串的類型以及如何編寫它們將在後面描述。

在本例中,我們使用數字文字和字符串文字作為第一個參數,但當然您可以使用包含這些值的變量。

s = format(255, '04x') print(s) print(type(s)) # 00ff # print(format('center', '*^16')) # *****center***** 字符串方法 str.format()

字符串 str 類型還有一個 format() 方法。

Built-in Types — str.format() — Python 3.10.0 Documentation

字符串 str 中調用 format() 方法的 {} 稱為替換字段,並由 format() 方法的參數替換。

格式規範字符串應寫入替換字段 {} 中,後跟“:”。

返回值是一個格式化的字符串 str。

上面描述的內置函數format()的等效過程如下。

s = '{:04x}'.format(255) print(s) print(type(s)) # 00ff # print('{:*^16}'.format('center')) # *****center*****

同樣,我們使用數字文字和字符串文字作為參數,但當然變量也是可以接受的。

指定替換字段的參數按順序指定參數(默認)

可以有多個替換字段 {},默認情況下,方法參數是按順序處理的。如果省略 {} 中的格式規範字符串,它只會被 str() 轉換為字符串。

用於在字符串中插入變量值並打印它們。

print('{}-{}-{}'.format('100', '二百', 300)) # 100-二百-300 為整數值指定位置參數

如果在 {} 中指定了整數值,例如 {0} 或 {1},輸出將取決於參數的順序。同一個號碼可以重複使用。當您想在字符串中插入相同的值時,這很有用。

print('{0}-{1}-{0}'.format('foo', 'bar')) # foo-bar-foo 為任意名稱(字符串)指定關鍵字參數

您還可以在 {} 中指定任何名稱並將其作為關鍵字參數輸入。

print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018)) # 11/1/2018 指定一個列表或字典作為參數

列表和字典可以指定為參數。

使用 [] 在替換字段中指定列表的索引或字典的鍵。請注意,引號 “‘” 和 “” 不用於指定字典鍵。

如果要重複使用相同的參數,則需要如上所述指定整數值或字符串(名稱)。

l = ['one', 'two', 'three'] print('{0[0]}-{0[1]}-{0[2]}'.format(l)) # one-two-three d1 = {'name': 'Alice', 'age': 20} d2 = {'name': 'Bob', 'age': 30} print('{0[name]} is {0[age]} years old.\n{1[name]} is {1[age]} years old.'.format(d1, d2)) # Alice is 20 years old. # Bob is 30 years old.

它可以通過將 * 附加到列表並將其指定為參數來擴展為位置參數,或者通過將 ** 附加到字典並將其指定為參數來擴展為關鍵字參數。

l = ['one', 'two', 'three'] print('{}-{}-{}'.format(*l)) # one-two-three d = {'name': 'Alice', 'age': 20} print('{name} is {age} years old.'.format(**d)) # Alice is 20 years old. 大括號 {} 的說明

如果你想在format()方法中寫大括號{,},像{{,}}一樣重複兩次。請注意,不能轉義反斜杠。

print('{{}}-{num}-{{{num}}}'.format(num=100)) # {}-100-{100} 格式化字符串

在這兩種情況下,要指定格式,請在 {} 中的整數值或名稱字符串後寫入“:format string”。

print('{num:x}'.format(num=255)) # ff print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018)) # 11/01/2018

下面,我們將解釋如何使用格式字符串指定格式。示例代碼使用字符串方法 str.format(),但相同的格式字符串可以與內置函數 format() 一起使用。在內置函數 format() 中,格式規範字符串被指定為第二個參數。

左對齊、中心對齊、右對齊

您可以在下方對齊左對齊、居中對齊、右對齊等。將字符總數指定為數字。

print('left : {:10}'.format(100)) # left : 100 # center: 100 # right : 100

也可以指定要填充的字符。如果省略,如上例所示,為空格。

只要是單個字符,就可以使用雙字節字符。

print('left : {:*10}'.format(100)) # left : 100******* # center: aaa100aaaa # right : 鬼鬼鬼鬼鬼鬼鬼100

右對齊 >不考慮符號 (-,+)。如果使用 =,則符號後跟指定的字符。如果要指定+,請在= 後寫+。符號處理的細節在後面描述。

print('sign: {:0>10}'.format(-100)) print('sign: {:0=10}'.format(-100)) print('sign: {:0=+10}'.format(100)) # sign: 000000-100 # sign: -000000100 # sign: +000000100

可以為字符串指定,但 = 將導致錯誤 ValueError。如果要對字符串使用 =,則需要使用 int() 將其轉換為數字。

# print('sign: {:0=10}'.format('-100')) # ValueError: '=' alignment not allowed in string format specifier print('sign: {:0=10}'.format(int('-100'))) # sign: -000000100

這同樣適用於浮點數。小數點也算作一個字符。

print('left : {:*10}'.format(1.23)) # left : 1.23****** # center: aaa1.23aaa # right : 鬼鬼鬼鬼鬼鬼1.23 print('sign: {:0>10}'.format(-1.23)) print('sign: {:0=10}'.format(-1.23)) print('sign: {:0=+10}'.format(1.23)) # sign: 00000-1.23 # sign: -000001.23 # sign: +000001.23

如果按原樣指定,列表、元組等將導致錯誤,並且可以使用 str() 將其轉換為字符串。

l = [0, 1] print(type(l)) # # print('{:*^16}'.format(l)) # TypeError: unsupported format string passed to list.__format__ print(type(str(l))) # print('{:*^16}'.format(str(l))) # *****[0, 1]*****

對於左對齊、中心對齊和右對齊,還有稱為 ljust()、center() 和 rjust() 的專用字符串方法。

0 填充

如果您想通過填零調整位數,請將要填充的字符設置為0並右對齊。

在填零的情況下,如果省略了對齊符號,則將其視為指定了 = 進行處理。

print('zero padding: {:0=10}'.format(100)) print('zero padding: {:010}'.format(100)) # zero padding: 0000000100 # zero padding: 0000000100 print('zero padding: {:0=10}'.format(-100)) print('zero padding: {:010}'.format(-100)) # zero padding: -000000100 # zero padding: -000000100

#錯誤!

# print('zero padding: {:010}'.format('-100')) # ValueError: '=' alignment not allowed in string format specifier

對於補零,還有一個專門的字符串方法叫做 zfill()。

符號(加號或減號)

默認情況下,只有負數用符號(減號-)標記。

將 + 添加到格式規範字符串時,還會為正數顯示一個符號(加號 +)。如果加空格,則在正數的開頭顯示一個空格,位數與負數對齊。

print('sign: {}'.format(100)) print('sign: {}'.format(-100)) # sign: 100 # sign: -100 print('sign: {:+}'.format(100)) print('sign: {:+}'.format(-100)) # sign: +100 # sign: -100 print('sign: {: }'.format(100)) print('sign: {: }'.format(-100)) # sign: 100 # sign: -100

填充任意字符時要小心,比如上面提到的填零。默認情況下,沒有 + 也沒有空格,用多一個字符填充正數。

print('sign: {:06}'.format(100)) print('sign: {:06}'.format(-100)) # sign: 000100 # sign: -00100 print('sign: {:+06}'.format(100)) print('sign: {:+06}'.format(-100)) # sign: +00100 # sign: -00100 print('sign: {: 06}'.format(100)) print('sign: {: 06}'.format(-100)) # sign: 00100 # sign: -00100

如果使用對齊符號,則符號指定符號應寫在對齊符號之後。

print('sign: {:_>6}'.format(100)) print('sign: {:_>6}'.format(-100)) # sign: ___100 # sign: __-100 print('sign: {:_>+6}'.format(100)) print('sign: {:_>+6}'.format(-100)) # sign: __+100 # sign: __-100 print('sign: {:_> 6}'.format(100)) print('sign: {:_> 6}'.format(-100)) # sign: __ 100 # sign: __-100 數字分隔符(逗號、下劃線)

每三位數添加一個逗號或下劃線 _ 分隔符。這使得大數字更容易閱讀。注意 underscore_ 是 Python 3.6 中新增的一個選項,因此不能在早期版本中使用。

print('{:,}'.format(100000000)) # 100,000,000 print('{:_}'.format(100000000)) # 100_000_000

在浮點數 float 類型的情況下,只有整數部分被分隔。

print('{:,}'.format(1234.56789)) # 1,234.56789 二進制、八進制和十六進制數

將數值轉換為二進制、八進制和十六進制數以供輸出。

b: 二進制o: 八進制d: 十進制x,X: 十六進制(大寫字母大寫)print('bin: {:b}'.format(255)) print('oct: {:o}'.format(255)) print('dec: {:d}'.format(255)) print('hex: {:x}'.format(255)) print('HEX: {:X}'.format(255)) # bin: 11111111 # oct: 377 # dec: 255 # hex: ff # HEX: FF

它也可以與 0-fill 結合使用,通常用於對齊二進制和十六進製表示法中的數字。

print('bin: {:08b}'.format(255)) print('oct: {:08o}'.format(255)) print('dec: {:08d}'.format(255)) print('hex: {:08x}'.format(255)) print('HEX: {:08X}'.format(255)) # bin: 11111111 # oct: 00000377 # dec: 00000255 # hex: 000000ff # HEX: 000000FF

請注意,必須在考慮前綴的情況下指定零填充字符的數量。

print('bin: {:#010b}'.format(255)) print('oct: {:#010o}'.format(255)) print('dec: {:#010d}'.format(255)) print('hex: {:#010x}'.format(255)) print('HEX: {:#010X}'.format(255)) # bin: 0b11111111 # oct: 0o00000377 # dec: 0000000255 # hex: 0x000000ff # HEX: 0X000000FF

對於二進制和十六進制數,只能插入下劃線 _ 數字分隔符(Python 3.6 或更高版本)。使用 4 位分隔符;零填充字符的數量還必須考慮下劃線的數量。

print('hex: {:08x}'.format(255)) print('hex: {:09_x}'.format(255)) print('hex: {:#011_x}'.format(255)) # hex: 000000ff # hex: 0000_00ff # hex: 0x0000_00ff

只有整數類型 int 可以將格式轉換為二進製或十六進制。您可以使用 int() 將其轉換為數字。

# print('hex: {:08x}'.format('255')) # ValueError: Unknown format code 'X' for object of type 'str' print('hex: {:08x}'.format(int('255'))) # hex: 000000ff 指定小數點後的位數

要指定小數點後的位數,請執行以下操作: n 是位數。小數點後的位數與整數部分的位數無關,成為指定位數。.[n]f

print('{:.2f}'.format(123.456)) print('{:.5f}'.format(123.456)) print('{:.3f}'.format(0.0001234)) # 123.46 # 123.45600 # 0.000

小數點的左側可以指定為左對齊、居中對齊、右對齊或如上所述的零填充。如果目標值的位數大於指定的位數,則不執行任何操作。如果目標值中的位數大於指定的位數,則不執行任何操作。

print('{:>12.5f}'.format(123.456)) print('{:012.5f}'.format(123.456)) print('{:06.5f}'.format(123.456)) # 123.45600 # 000123.45600 # 123.45600

如果您指定的位數小於小數點後的原始位數,則該值將被四捨五入。請注意,這不是四捨五入到最接近的整數,而是四捨五入到偶數,例如0.5 舍入為 0。

print('{:.0f}'.format(0.4)) print('{:.0f}'.format(0.5)) print('{:.0f}'.format(0.6)) # 0 # 0 # 1

如果要使用一般四捨五入,可以使用標準庫decimal的quantize()方法。

指數符號

當一個浮點浮點數轉換為字符串 str 時,它會根據位數自動以指數表示法寫入。整數類型 int 沒有。

print('{}'.format(0.0001234)) print('{}'.format(0.00001234)) # 0.0001234 # 1.234e-05 print('{}'.format(1234000000000000.0)) print('{}'.format(12340000000000000.0)) print('{}'.format(12340000000000000000000000)) # 1234000000000000.0 # 1.234e+16 # 12340000000000000000000000

如果在格式規範字符串中指定 e 或 E,則始終可以轉換為指數表示法。輸出中使用的字符將分別為 e 和 E。

print('{:e}'.format(0.0001234)) print('{:E}'.format(0.0001234)) # 1.234000e-04 # 1.234000E-04

也可以指定小數點後的位數。整數部分將始終是一位數,小數點將是指定的位數。

print('{:.5e}'.format(0.0001234)) print('{:.2E}'.format(0.0001234)) # 1.23400e-04 # 1.23E-04 print('{:.5e}'.format(987.65)) print('{:.2E}'.format(987.65)) # 9.87650e+02 # 9.88E+02

請注意,如果您指定左對齊、中心對齊、右對齊或零填充,則 e-、E+ 等也將被視為數字(字符)。

print('{:>12.5e}'.format(987.65)) print('{:012.2E}'.format(987.65)) # 9.87650e+02 # 00009.88E+02 有效數字(有效數字的位數)

您可以通過執行以下操作來指定總位數。根據結果,將自動使用指數表示法。請注意,小數點後的尾隨零將被省略。.[n]g

print('{:.2g}'.format(123.456)) print('{:.3g}'.format(123.456)) print('{:.8g}'.format(123.456)) print('{:.3g}'.format(0.0001234)) # 1.2e+02 # 123 # 123.456 # 0.000123

如果省略 g,則輸出將不是整數。 g 在大多數情況下是相同的,但僅在輸出為整數的情況下。

print('{:.2}'.format(123.456)) print('{:.3}'.format(123.456)) print('{:.8}'.format(123.456)) print('{:.3}'.format(0.0001234)) # 1.2e+02 # 1.23e+02 # 123.456 # 0.000123

如果我們處理相同的值,我們分別得到以下結果。

print('{:.3f}'.format(123.456)) print('{:.3e}'.format(123.456)) print('{:.3g}'.format(123.456)) print('{:.3}'.format(123.456)) # 123.456 # 1.235e+02 # 123 # 1.23e+02 print('{:.8f}'.format(123.456)) print('{:.8e}'.format(123.456)) print('{:.8g}'.format(123.456)) print('{:.8}'.format(123.456)) # 123.45600000 # 1.23456000e+02 # 123.456 # 123.456

在g或者省略的情況下,小數點後的尾隨零被省略,所以如果要輸出相同數量的有效數字(有效數字的數量),使用e或E的指數表示法。整數部分始終是一位,小數點是指定的位數,所以如果要輸出n個有效數字,只需指定n-1即可。

print('{:.4e}'.format(123.456)) print('{:.4e}'.format(0.000012345)) print('{:.4e}'.format(12)) # 1.2346e+02 # 1.2345e-05 # 1.2000e+01 百分比顯示

如果在格式規範字符串中指定了 %,則數值 float 或 int 的值乘以 100 並轉換為帶有 % 的字符串。

也可以指定小數點後的位數。默認為小數點後六位數字。還可以使用左對齊、居中對齊、右對齊和零填充。 % 也算作一個字符。

print('{:%}'.format(0.12345)) print('{:.2%}'.format(0.12345)) # 12.345000% # 12.35% print('{:%}'.format(10)) print('{:.2%}'.format(10)) # 1000.000000% # 1000.00% print('{:>7.2%}'.format(0.12345)) print('{:07.2%}'.format(0.12345)) # 12.35% # 012.35%


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3